前情提要:Angular2 的模組化 (番外篇-MEAN Stack 上集)
上集把環境都建置好了,接下來就可以開始打造Restful API
我們先建立一個models
的資料夾,用來放置所有Model的Schema。
在這個Lala Travel的專案,我希望可以提供二種服務,一個是旅遊行程(Tour),一個是票卷(Ticket),所以我們先來建立Tour的Model
mkdir models
touch models/Tour.js
在 models/Tour.js 設置Tour Model的Schema
var mongoose = require('mongoose');
var TourSchema = new mongoose.Schema({
name: String,
imgurl: String,
location: String,
price: Number,
rating: Number,
});
module.exports = mongoose.model('Tour', TourSchema);
我們希望使用下面的Restful API樣式來操作Tour Model的資料
Resource(URI) | POST(新增) | GET(檢視 ) | PUT(修改) | DELETE(刪除) |
---|---|---|---|---|
/tours | 單筆新增行程 | 行程列表 | X | X |
/tours/:id | X | 單筆檢視行程 | 修改行程 | 單筆刪除行程 |
首先我們先建立tours的route檔案
touch routes/tours.js
在app.js中加上tours的route設定
var tours = require('./routes/tours');
app.use('/tours', tours);
接下來我們可以用mongoose的API來操作 Tour Model
Query
Create
Update
Remove
in routes/tours.js
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Tour = require('../models/Tour.js');
/* GET /tours 行程列表 */
router.get('/', function(req, res, next) {
Tour.find(function (err, todos) {
if (err) return next(err);
res.json(Tour);
});
});
module.exports = router;
我們可以在terminal用以下的指令打列表的API,由於還沒新增任何資料,所以回傳一個空陣列
curl localhost:3000/tours
# => []%
in routes/tours.js
/* POST /tours 單筆新增行程 */
router.post('/', function(req, res, next) {
Tour.create(req.body, function (err, post) {
if (err) return next(err);
res.json(post);
});
});
使用Postman成功的建立一筆行程
使用Postman利用GET localhost:3000/tours
可查詢出剛剛建立的資料
in routes/tours.js
/* GET /tours/id 單筆檢視行程 */
router.get('/:id', function(req, res, next) {
Tour.findById(req.params.id, function (err, post) {
if (err) return next(err);
res.json(post);
});
});
in routes/tours.js
/* PUT /tours/:id 單筆修改行程 */
router.put('/:id', function(req, res, next) {
Tour.findByIdAndUpdate(req.params.id, req.body, function (err, post) {
if (err) return next(err);
res.json(post);
});
});
使用Postman成功的修改一筆行程
使用Postman利用GET localhost:3000/tours/:id
可查詢出剛剛建立的資料
in routes/tours.js
/* DELETE /todos/:id 單筆刪除行程 */
router.delete('/:id', function(req, res, next) {
Tour.findByIdAndRemove(req.params.id, req.body, function (err, post) {
if (err) return next(err);
res.json(post);
});
});
使用Postman先新增一筆測試資料
再使用Postman成功刪除指定的單筆行程資料
這樣就建立好符合Restful風格的API了。